﻿#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>
typedef char BTDataType;
typedef struct BinaryTreeNode
{
	struct BinaryTreeNode* right;
	struct BinaryTreeNode* left;
	BTDataType data;
}BTNode;

// 通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树
BTNode* BinaryTreeCreate(BTDataType* arr, int n, int* pi);
// 二叉树前序遍历 
void BTPrevOrder(BTNode* root);
// 二叉树中序遍历
void BTInOrder(BTNode* root);
// 二叉树后序遍历
void BTPostOrder(BTNode* root);


// 二叉树节点个数
int BTSize(BTNode* root);
// 二叉树叶子节点个数
int BTLeafSize(BTNode* root);
// 二叉树第k层节点个数
int BTLevelKSize(BTNode* root, int k);
//⼆叉树的深度/⾼度
int BTDepth(BTNode* root);
// 二叉树查找值为x的节点
BTNode* BTFind(BTNode* root, BTDataType x);
// 二叉树销毁
void BTDestory(BTNode** root);
// 层序遍历(这里要用到队列的结构)
void BTLevelOrder(BTNode* root);
// 判断⼆叉树是否是完全⼆叉树
bool BTComplete(BTNode* root);